package test.n00000;

import java.util.HashSet;
import java.util.Set;

public class Problem00030 {
    public static void main(String[] args) {
        println("abcabcbb");
        println("bbbb");
        println("abc");
        println("pwwkew");
    }


    public static void println(String str) {
        Solution s = new Solution();
        System.out.println(str + "," + s.lengthOfLongestSubstring(str));
    }

    public static class Solution {
        /**
         * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
         *
         * 解题方法: 滑动窗口
         *
         * @param s
         * @return
         */
        public int lengthOfLongestSubstring(String s) {
            char[] chars = s.toCharArray();
            Set<Character> set = new HashSet<>();
            int max = 0;
            int rk = -1;

            for (int i = 0; i < chars.length; i++) {
                // 每次移动都删除最左元素
                if (i != 0) {
                    set.remove(chars[i - 1]);
                }

                while (rk + 1 < chars.length && !set.contains(chars[rk + 1])) {
                    rk++;
                    set.add(chars[rk]);
                }

                max = Math.max(max, rk - i + 1);
            }
            return max;
        }
    }
}
